package fox.framework.rpc.context;

import fox.framework.rpc.client.node.rule.RuleFactory;
import fox.framework.rpc.context.event.RpcEventPublisher;
import fox.framework.rpc.context.generator.name.RpcNameGenerator;

/**
 * Rpc应用容器
 * 整体Rpc入口负责上层API的逻辑和下层API的启动
 * @author cuichao
 * @Description: RpcApplicationContext
 * @Date: create in 2021/1/6 16:24
 */
public interface RpcApplicationContext extends RpcObjectFactory, RpcEventPublisher {
    /**
     * 启动服务
     */
    void run() throws Exception;
    /**
     * 关闭服务
     * @throws Exception
     */
    void shutdown() throws Exception ;
    /**
     * 返回一个RpcContext 提供外部使用
     * @return
     */
    RpcObjectFactory getObjectFactory();

    /**
     * 应用名称
     */
    String name();
    /**
     * 服务地址
     * @return
     */
    String getHost();

    /**
     * 服务端口
     * @return
     */
    int getPort();

    /**
     * 默认协议
     * @return
     */
    String getGlobalProtocol();

    /**
     * 默认分组
     * @return
     */
    String getGlobalGroup();
    /**
     * 默认消息转换器名称
     * @return
     */
    String getDefaultConverterName();
    /**
     * 默认的RpcName生成器
     * @return
     */
    RpcNameGenerator getRpcNameGenerator();
    /**
     * 全局负责均衡器
     * @return
     */
    RuleFactory getGlobalRuleFactory();


}
